package com.chapter10.innerclass_;

/**
 * 局部内部类的使用
 *
 * */
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.AA();
        System.out.println("outer02 hashcode="+outer02);
    }
}

class Outer02{
    private int n1 = 100;
    private void BB(){
        System.out.println("Inner02 BB()");
    }
    public void AA(){
        //局部内部类是定义在外部类的局部位置的，通常在方法中使用
        //不能添加访问修饰符，但是可以使用final 修饰
        //局部内部类仅仅在定义它的方法或代码块中
        final class Inner02{//局部内部类
            //可以直接访问外部类的所有成员，包含私有的
            private int n1 = 200;
            public void f1(){
                //局部内部类可以直接访问外部类的所有成员
                //如果外部类和局部类的成员重名时，默认遵循就近原则，如果想访问外部类成员，
                // 则可以使用 外部类.this.成员 去访问
                System.out.println("n1=" + n1 );
                //Outer02.this 本质就是外部类的对象，即哪个对象调用了m1，
                //Outer02.this 就是哪个对象
                System.out.println("外部类n1="+Outer02.this.n1);
                System.out.println("Outer02.this hashcode="+Outer02.this);

                BB();
            }
        }
        //外部类在方法中，可以创建局部类（Inner02）对象，然后调用方法即可
        Inner02 inner02 = new Inner02();
        inner02.f1();
    }
}
